package com.haixiaoke.saas.apartment.mapper;

import com.haixiaoke.saas.apartment.domain.CalendarPrice;
import com.haixiaoke.saas.apartment.domain.HousingAllocation;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 价格日历Mapper接口
 *
 * @author panda
 * @date 2024-03-29
 */
public interface CalendarPriceMapper {
    /**
     * 查询价格日历
     *
     * @param id 价格日历主键
     * @return 价格日历
     */
    CalendarPrice selectCalendarPriceById(Long id);

    /**
     * 查询价格日历列表
     *
     * @param calendarPrice 价格日历
     * @return 价格日历集合
     */
    List<CalendarPrice> selectCalendarPriceList(CalendarPrice calendarPrice);

    /**
     * 新增价格日历
     *
     * @param calendarPrice 价格日历
     * @return 结果
     */
    int insertCalendarPrice(CalendarPrice calendarPrice);

    /**
     * 修改价格日历
     *
     * @param calendarPrice 价格日历
     * @return 结果
     */
    int updateCalendarPrice(CalendarPrice calendarPrice);

    /**
     * 删除价格日历
     *
     * @param id 价格日历主键
     * @return 结果
     */
    int deleteCalendarPriceById(Long id);

    /**
     * 批量删除价格日历
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCalendarPriceByIds(Long[] ids);

    /**
     *
     * @param allocationId  房屋配置id
     * @param houseId       房屋id
     * @param startTime     开始时间
     * @param endTime       结束时间
     * @param isContain     结束时间是否包括
     * @return
     */
    List<CalendarPrice> selectCalendarPriceListByTime(@Param("allocationId") Long allocationId,
                                                      @Param("houseId") String houseId,
                                                      @Param("startTime") Date startTime,
                                                      @Param("endTime") Date endTime,
                                                      @Param("isContain") Boolean isContain);

    /**
     * 根据时间范围查询价格日历，并标识哪些价格不能选择
     * @param allocationId
     * @param houseId
     * @param startTime
     * @param endTime
     * @param isContain
     * @return
     */
    List<CalendarPrice> selectCalendarPriceListByTimeAndOrder(@Param("allocationId") Long allocationId,
                                                              @Param("houseId") String houseId,
                                                              @Param("startTime") Date startTime,
                                                              @Param("endTime") Date endTime,
                                                              @Param("isContain") Boolean isContain);

    /**
     * 批量新增价格日历
     *
     * @param calendarPriceList
     * @return
     */
    int insertBatchCalendarPrice(List<CalendarPrice> calendarPriceList);

    int deleteCalendarPriceByTime(CalendarPrice calendarPrice);

    /**
     * 根据房屋id集合查询今天的价格日历价格
     *
     * @param houseIds
     * @return
     */
    @MapKey("house_id")
    Map<String, Map<String, Object>> selectTodayPriceByHouseIds(List<String> houseIds);

}
